<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="resources/shadow-dom.js"></script>
</head>
<body>
<div id="console"></div>
<div id="sandbox"></div>
<script>
description("Tests for TreeScope.comparePosition().");

document.getElementById('sandbox').appendChild(
    createDOM('div', {'id': 'a1'},
              createDOM('div', {'id': 'a2'},
                        createShadowRoot({'id': 'sr1'},
                                         createDOM('div', {'id': 'b1'},
                                                   createDOM('div', {'id': 'b2'}),
                                                   createDOM('div', {'id': 'b3'})))),
              createDOM('div', {'id': 'a3'},
                        createShadowRoot({'id': 'sr2'},
                                         createDOM('div', {'id': 'c1'},
                                                   createDOM('div', {'id': 'c2'},
                                                          createShadowRoot({'id': 'sr3'},
                                                                           createDOM('div', {'id': 'c3'}))))))));

var sr1, sr2, sr3;

function testCompareTreeScopePosition()
{
    var sandbox = document.getElementById('sandbox');
    document.body.offsetLeft;

    sr1 = getNodeInComposedTree('a2/');
    sr2 = getNodeInComposedTree('a3/');
    sr3 = getNodeInComposedTree('a3/c2/');

    shouldBe('internals.compareTreeScopePosition(document, sr1)', 'Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING');
    shouldBe('internals.compareTreeScopePosition(sr1, document)', 'Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING');

    shouldBe('internals.compareTreeScopePosition(sr1, sr2)', 'Node.DOCUMENT_POSITION_FOLLOWING');
    shouldBe('internals.compareTreeScopePosition(sr2, sr1)', 'Node.DOCUMENT_POSITION_PRECEDING');

    shouldBe('internals.compareTreeScopePosition(sr2, sr3)', 'Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING');
    shouldBe('internals.compareTreeScopePosition(sr3, sr2)', 'Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING');

    shouldBe('internals.compareTreeScopePosition(sr1, sr3)', 'Node.DOCUMENT_POSITION_FOLLOWING');
    shouldBe('internals.compareTreeScopePosition(sr3, sr1)', 'Node.DOCUMENT_POSITION_PRECEDING');

    shouldBe('internals.compareTreeScopePosition(document, document)', '0');
    shouldBe('internals.compareTreeScopePosition(sr1, sr1)', '0');

    getNodeInComposedTree('a3/c1').removeChild(getNodeInComposedTree('a3/c2'));

    shouldBeNonZero('internals.compareTreeScopePosition(sr3, sr2) & Node.DOCUMENT_POSITION_PRECEDING || internals.compareTreeScopePosition(sr3, sr2) & Node.DOCUMENT_POSITION_FOLLOWING');
    shouldBe('internals.compareTreeScopePosition(sr3, sr2) & Node.DOCUMENT_POSITION_DISCONNECTED', 'Node.DOCUMENT_POSITION_DISCONNECTED');
    shouldBe('internals.compareTreeScopePosition(sr3, sr2) & Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC', 'Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC');
    shouldBe('internals.compareTreeScopePosition(sr3, sr2)', 'internals.compareTreeScopePosition(sr3, sr2)');
}

testCompareTreeScopePosition();
</script>
</body>
</html>
